package com.powernode.lambda.listener.normal;

// 1. 定义一个监听器接口（类似于 PdfPageEvent）
interface PageListener {
    // 当某一页结束时调用，pageNum 是页码（从1开始）
    void onPageEnd(int pageNum);
}

// 2. 定义一个文档生成器（模拟 iText 的 PdfWriter 或 Document）
class DocumentGenerator {
    // 用于保存注册的监听器（可以多个，这里只放一个简化）
    private PageListener pageListener;

    // 3. 提供一个方法，允许外部设置监听器（类似于 writer.setPageEvent(...)）
    public void setPageListener(PageListener listener) {
        this.pageListener = listener;
    }

    // 4. 模拟生成多页文档的过程
    public void generate() {
        System.out.println("开始生成文档...");

        int totalPages = 3; // 假设我们要生成 3 页

        for (int pageNum = 1; pageNum <= totalPages; pageNum++) {
            // 模拟：生成第 pageNum 页的内容
            System.out.println("正在生成第 " + pageNum + " 页的内容...");
            
            // 模拟一些处理时间
            try {
                Thread.sleep(500); // 暂停 500ms，模拟生成过程
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            // 5. 重要：当这一页内容生成完了，自动触发监听器回调！
            if (pageListener != null) {
                System.out.println("[系统内部] 第 " + pageNum + " 页生成完毕，通知监听器...");
                pageListener.onPageEnd(pageNum); // 👈 自动调用！您没有手动写这行！
            }
        }

        System.out.println("文档生成完毕，共 " + totalPages + " 页。");
    }
}

// 3. 您自定义的监听器实现类（类似于您的 HeaderFooterEvent）
class MyPageListener implements PageListener {
    @Override
    public void onPageEnd(int pageNum) {
        // 这里可以理解为：在每页生成完毕后，自动添加页脚、水印等
        System.out.println("🔁 监听器回调：第 " + pageNum + " 页已完成，我在这里自动添加页脚或水印等！");
        System.out.println("   → 比如：添加文本「第 " + pageNum + " 页，共 3 页」到页脚区域");
    }
}

// 4. 主程序：测试这个机制
public class ListenerCallbackDemo {
    public static void main(String[] args) {
        // 创建文档生成器
        DocumentGenerator docGen = new DocumentGenerator();

        // 创建您的监听器对象
        MyPageListener myListener = new MyPageListener();

        // 将监听器注册（设置）到文档生成器（关键！）
        docGen.setPageListener(myListener);

        // 开始生成文档（模拟 iText 的 writer 生成过程）
        // 注意：您并没有手动调用 myListener.onPageEnd(...)！
        // 是 DocumentGenerator 在生成每页后，自动调用的！
        docGen.generate();
    }
}